package com.indusfo.spc.mapper;

import com.indusfo.spc.pojo.Station;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @author: louk
 * @Description: 工位信息mapper
 * @date: 2019/11/14 17:53
 */

public interface StationMapper {

    /**
     * 根据编码查重
     *
     * @param staCode
     * @param staId
     * @return
     */
    Station getByStationCode(@Param("stationCode") String staCode, @Param("stationId") Integer staId);


    /**
     * 查询单个工位
     *
     * @param staId
     * @return java.util.List<com.indusfo.spc.pojo.Station>
     * @author xuz
     * @date 2018/11/30 2:16 PM
     */
    List<Station> getStation(@Param("stationId") Integer stationId);


    /**
     * 查询多个工位
     *
     * @param station
     * @return
     */
    List<Station> listStation(Station station);

    /**
     * 分页总数
     *
     * @param station
     * @return
     */
    int countStation(Station station);

    /**
     * 删除
     *
     * @param staIds
     * @param dataState
     * @return
     */
    int delStation(@Param("staIds") Integer[] staIds, @Param("dataState") Integer dataState);


    /**
     * 根据产线查询集合
     *
     * @param productionLineId
     * @return
     */
    List<Station> getByProductionLineId(@Param("productlineId") Integer productionLineId);


    /**
     * 根据车间查询集合
     *
     * @param workshopId
     * @return
     */
    List<Station> getByWorkshopId(@Param("workshopId") Integer workshopId);

    /**
     * 根据工序查询集合
     *
     * @param proId
     * @return
     */
    List<Station> getByProId(@Param("proId") Integer proId);

    /**
     * 重写父类的更新方法
     *
     * @param station
     * @return
     */
    int updateByPrimaryKeySelective(Station station);

    /**
     * 根据名称去重
     *
     * @param station
     * @return
     */
    int selectByStaName(Station station);


    /**
     * 删除工序下的工位
     *
     * @param staIds
     * @return
     */
    int deleteStationByPro(@Param("staIds") Long[] staIds);

    /**
     * 新增工序工序下的工位
     *
     * @param staIds
     * @param lproId
     * @return
     */
    int insertStationByPro(@Param("staIds") Integer[] staIds, @Param("lproId") Integer lproId);

    /**
     * 重写父类的新增方法
     *
     * @param station
     * @return
     */
    int insertSelective(Station station);

    /**
     * 获取指定产线id下的工位个数
     *
     * @param productLineIds
     * @return
     */
    int listStationByProductLineId(@Param("productLineIds") Long[] productLineIds);


    /**
     * 根据车间ID启用停用工位
     *
     * @param workshopIds
     * @param dataState
     * @return
     */
    int updateStationByWorkshopId(@Param("workshopIds") Integer[] workshopIds, @Param("dataState") Integer dataState);


    /**
     * 根据产线ID启用停用工位
     *
     * @param lProductLineIds
     * @param lDataState
     * @return
     */
    int updateStationByProductionLineId(@Param("productLineIds") Long[] lProductLineIds, @Param("dataState") Integer lDataState);

    /**
     * 产线中更新车间id同时更新工位
     *
     * @param workshopId
     * @param productionLineId
     * @return
     */
    int updateStationWorkshopIdByProductionLineId(@Param("workshopId") Integer workshopId, @Param("productionlineId") Integer productionLineId);

    /**
     * 工位编码查重
     *
     * @param station
     * @return
     */
    int checkNoRepeatStaCode(Station station);

    /**
     * 工位名称查重
     *
     * @param station
     * @return
     */
    int checkNoRepeatStaName(Station station);

    List<Station> queryListStationToInsert(Station station);

    Integer countStationToInsert(Station station);
}